package com.example.leetcode.prcatice;

import java.util.Comparator;
import java.util.PriorityQueue;

/**
 * 给你一个大小为 m * n 的矩阵 mat，矩阵由若干军人和平民组成，分别用 1 和 0 表示。
 *
 * 请你返回矩阵中战斗力最弱的 k 行的索引，按从最弱到最强排序。
 *
 * 如果第 i 行的军人数量少于第 j 行，或者两行军人数量相同但 i 小于 j，那么我们认为第 i 行的战斗力比第 j 行弱。
 *
 * 军人 总是 排在一行中的靠前位置，也就是说 1 总是出现在 0 之前。
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/the-k-weakest-rows-in-a-matrix
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class Test1337 {


    public int[] kWeakestRows(int[][] mat, int k) {
        int len = mat.length;
        int len1 = mat[0].length;
        int[] answer = new int[k];
       // int[] res = new int[len];
        PriorityQueue<int[]> queue = new PriorityQueue<>((x,y)->{
            if(x[1] != y[1]) return x[1] - y[1];
            else  return x[0] - y[0];
        });
        for (int j = 0;j<len;j++) {
            int count = 0;
            for (int i = 0;i<len1;i++){
                if(mat[j][i] ==1){
                    count++;
                }
            }
            queue.offer(new int[]{j,count});
        }
        for (int i = 0;i<k;i++){
            int[] poll = queue.poll();
            answer[i] = poll[0];
        }
        return answer;
    }
}


class Demo1337{
    public static void main(String[] args) {
        int[][]mat = new int[][]{{1,1,1,1,1},{1,1,1,1,1},{1,1,1,1,1}};
        Test1337 test1337 = new Test1337();
        int[] ints = test1337.kWeakestRows(mat, 1);
        for (int i:ints) {
            System.out.println(i);
        }
    }
}